package com.dofast.bt.util;

import android.content.Context;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.widget.Toast;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 电话号码的工具类
 *
 * @author hsj
 * @date 2016-10-20
 */
public final class PhoneNumUtil {

    /**
     * 正则式验证手机格式
     */
    public static boolean isMobileNO(String mobiles) {
        /*
        移动：134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
		联通：130、131、132、152、155、156、185、186
		电信：133、153、180、189、（1349卫通）
		总结起来就是第一位必定为1，第二位必定为3或5或8，其他位置的可以为0-9
		*/
        String telRegex = "[1][34578]\\d{9}";//"[1]"代表第1位为数字1，"[358]"代表第二位可以为3、5、8中的一个，"\\d{9}"代表后面是可以是0～9的数字，有9位。
        if (TextUtils.isEmpty(mobiles)) return false;
        else return mobiles.matches(telRegex);
    }

    public static boolean isCarNO(String carNO) {
        String express = "[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[警京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼]{0,1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}";
        if (TextUtils.isEmpty(carNO)) return false;
        else return carNO.matches(express);
    }


    /**
     * 判断是否电信的号码
     *
     * @param number
     * @return
     */
    public static boolean isChinaTelecomNumber(String number) {
        Pattern pattern = Pattern.compile("^(133|153|180|181|189)[0-9]{8}");
        Matcher matcher = pattern.matcher(number);
        if (matcher.matches()) {
            return true;
        }
        return false;
    }

    /**
     * 判断是否非电信手机号码
     *
     * @param number
     * @return
     */
    public static boolean isNoChinaTelecomNumber(String number) {
        Pattern pattern = Pattern
                .compile("^(134|135|136|137|138|139|147|150|151|152|157|158|159|182|183|187|188|130|131|132|155|156|185|186|145)[0-9]{8}");
        Matcher matcher = pattern.matcher(number);
        if (matcher.matches()) {
            return true;
        }
        return false;
    }

    /**
     * 判断是否手机号码
     * 移动的号段：134(0-8)、135、136、137、138、139、147（预计用于TD上网卡）、150、151、152、157（TD专用）、
     * 158、159、187（未启用）、182、183、188（TD专用）
     * 联通的号段：130、131、132、155、156（世界风专用）、185（未启用）、186（3g）、145
     * 电信的号段：133、153、180、181、189 网通在并入联通之前只经营固话和小灵通，没有手机号段。
     * 中国卫通的卫星电话使用1349号段，现在卫通的基础电信服务并入了电信、不知这号段有没有移交给电信。
     *
     * @param number
     * @return
     */
    public static boolean isPhoneNumber(String number) {
        boolean result = false;
        if (!TextUtils.isEmpty(number)) {
            Pattern pattern = Pattern
                    .compile("^(134|135|136|137|138|139|147|150|151|152|157|158|159|182|183|187|188|130|131|132|155|156|185|186|145|133|153|180|181|189|177)[0-9]{8}");
            result = pattern.matcher(number).matches();
        }
        return result;
    }

    /**
     * 检查是否是手机号码，并Toast提示
     *
     * @param context
     * @param num
     * @param errorHint
     * @return
     */
    public static boolean toastCheckPhoneNumResult(Context context, String num, String errorHint) {
        boolean result = isPhoneNumber(num);

        if (!result && !TextUtils.isEmpty(errorHint)) {
        }

        return result;
    }

    /**
     * 检查是否是手机号码，并Toast提示
     *
     * @param context
     * @param num
     * @param
     * @return
     */
    public static boolean toastCheckPhoneNumResult(Context context, String num, int errorHintResId) {
        boolean result = isPhoneNumber(num);

        if (!result && errorHintResId > 0) {
            Toast.makeText(context, errorHintResId, Toast.LENGTH_SHORT).show();
        }

        return result;
    }

    /**
     * 获取本机号码，无法处理双卡或多卡
     *
     * @param context
     * @return
     */
    public static String getPhoneNum(Context context) {

        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        String phoneNum = tm.getLine1Number();

        if (!TextUtils.isEmpty(phoneNum)) {
            int length = phoneNum.length();
            phoneNum = phoneNum.substring(phoneNum.length() - Math.min(11, phoneNum.length()), phoneNum.length());
            if (!isPhoneNumber(phoneNum)) {
                phoneNum = "";
            }
        }

        return phoneNum;
    }

    /**
     * 判断合法的EMAIL
     *
     * @param email
     * @return
     */
    public static boolean checkEmail(String email) {
        if (TextUtils.isEmpty(email)) {
            return false;
        }
        String check = "\\w+([-.]\\w+)*@\\w+([-]\\w+)*\\.(\\w+([-]\\w+)*\\.)*[a-z]{2,3}$";
        try {
            Pattern regex = Pattern.compile(check);
            Matcher matcher = regex.matcher(email);
            if (matcher.matches()) {
                return true;
            } else {
                return false;
            }
        } catch (Exception e) {
            return false;
        }
    }


}
